#include <stdio.h>

void PrintArray(int (*a)[3])
{
    for(int i = 0; i < 2; i++)
    {
        for(int j = 0; j < 3; j++)
        {
            printf("%x ",&a[i][j]);
        }
        printf("\n");
    }
}

int main()
{
    //定义一个2行3列的二维数组
    //初始化
    // int a[2][3] = {{1,2,3},{4,5,6}};
    // int b[2][3] = {1,2,3,4.5,6};

    //二维数组在内存中的排布:连续地址
    // PrintArray(a);

    //a的理解
    // printf("%d",sizeof(a));
    //a：一维数组指针
    //&a：二维数组指针
    //a[0]:一维数组首元素地址            
    //&a[0]：一维数组指针
    //&a[0][0]：数组元素指针
    // printf("%x %x %x %x\n",a,&a,&a[0],&a[0][0]);
    // printf("%x %x %x %x\n",a+1,&a+1,&a[0]+1,&a[0][0]+1);
    
    //int a[3] = {1,2,3}
    //&a
    // printf("%d",**(a+1));
    // printf("%d",*(a[0]+1));

    // //指针数组
    // int* p[2];
    // //p[0]指向a的第一行的一维数组
    // p[0] =  a;
    // //p[1]指向a的第二行的一维数组
    // p[1] = a+1;

    //a = &a[0]

    int* a[2];
    int b1 = 10;
    int b2 = 20;
    a[0] = &b1;
    a[1] = &b2;
    int* (*p)[2] = a;
    printf("%d\n",***p);
    return 0;
}